/* let num: any = 8 // 任意类型，不对类型进行校验
num.toFixed() // 没有提示
num = 'xxx' // 可以赋任意值（即可以把任意值给 any 类型） */

// let num // 隐式 any
// const sum = (n1, n2) => n1 + n2 // 隐式 any

/* let num: unknown = 88
num = 'abc'
console.log(num)
num() // error: 不能调用方法
console.log(num.length) // error: 不能访问属性 */

/* let num: unknown = 88
num = 'abc'
console.log(num)
if (typeof num === 'function') {
  num() // error: 不能调用方法
}
if (Array.isArray(num)) {
  console.log(num.length)
} */

// 并不是所有的类型都能进行收窄
/* let num = 'hello' // num 的类型已经确定就是 string 类型
if (typeof num === 'string') {
  console.log(num.length)
} else if (typeof num === 'function') {
  // 如果再等于了 function 类型，那是不可能的，所以 num 被推断为了 never 类型
  num() // Error
} */

// unknown 可以配合类型断言一起用
/* let num: unknown = '888'
;(num as string).length */

/* let num: unknown = '888'
// num.length
;(<string>num).length */
